package Test.trycatch;


/**
 * @Author: guozhenran
 * @Date: 2023/4/25 10:31
 * @Description: 如果finally块没有return语句，那么原来的返回值因为finally里的修改可能改变也有可能不变
 *      对于引用数据类型来说，finally中对返回值的修改（修改引用变量指向对象中的值）会影响try中return返回变量的值
 *      对于引用数据类型来说，finally中对返回值的修改（修改引用变量的地址值）不会影响try中return返回变量的值
 *      （解释：try或catch中的return要返回的值在finally执行之前会拷贝一份）
 */
import java.util.HashMap;
import java.util.Map;

public class Demo04_2 {
    public static void main(String[] args) {
        System.out.println(getMap());
    }

    public static Map<String,String> getMap(){
        Map<String,String> map = new HashMap<>();
        map.put("KEY","INIT");
        try{
            map.put("KEY","try");
            return map;
        }catch (Exception e){
            e.printStackTrace();
            map.put("KEY","catch");
        }finally {
            map.put("KEY","finally");
            map = null;//这里改变的是map地址，所以try返回的map的原地址的值还是{KEY=finally}
//     *      对于引用数据类型来说，finally中对返回值的修改（修改引用变量指向对象中的值）会影响try中return返回变量的值
//    *      对于引用数据类型来说，finally中对返回值的修改（修改引用变量的地址值）不会影响try中return返回变量的值
        }
        map.put("KEY", "hahaha");
        return map;
    }
}
